Add Native Subsplit Support#1149
Merged
Merged
Conversation
This makes the run editor show segment groups as editable headers with indented split rows, allowing users to create, remove, and rename groups directly from the splits table instead of editing a flat list only. This also wires the subsplit display mode into the settings UI as a localized combobox and updates the staged livesplit-core submodule with backend-controlled group action availability.
This updates the staged livesplit-core submodule to include the fix for moving whole subsplit groups as coherent sections in the run editor.
This updates the staged livesplit-core submodule to include single-segment subsplit groups and hierarchical scrolling before the timer has a current split.
This makes the run editor draw the same section boundary before an ungrouped segment that follows a segment group as it already draws before group headers. This also updates the staged livesplit-core submodule with renderer state for hierarchical section separators.
This makes the run editor show automatic segment group names as placeholder text while keeping manually entered group names as explicit input values. This also wires the subsplit display mode setting labels through the frontend localization table and updates the staged livesplit-core submodule with simpler group name bindings.
This keeps the full segment group selected when editing a group header in the run editor instead of collapsing the selection to the major split. This also updates the staged livesplit-core submodule with regression coverage for the same selection behavior.
This lets the run editor display and edit explicit segment group icons while showing inherited major-split icons as faint placeholders. This also updates the staged livesplit-core submodule with group icon support and refined current-group-expanded scrolling behavior.
This makes the Run Editor read each native segment group from its dedicated state list instead of reconstructing group bounds and properties from per-segment metadata. It also keeps explicit names visible when they happen to match their major split's current name. This updates the Cargo lock for the new core dependency and advances the staged livesplit-core submodule with invariant-preserving structural edits, a multi-group movement guard, and correct group-header icon layout.
CryZe
marked this pull request as ready for review
July 21, 2026 16:27
Move segment and group row rendering, selection state, and table-specific controls into focused modules. This keeps the large Run Editor view from accumulating another independent editing subsystem while preserving the existing behavior.
Expire mouse-focus suppression after its originating event so later keyboard navigation always activates the focused segment. Route Ctrl, Command, and Shift group-header selection through livesplit-core so complete group selection follows the same backend rules in every frontend.
Advance livesplit-core to the generalized gap-separator setting. The frontend settings UI now receives the accurate localized label and description while existing serialized layouts continue loading through the core compatibility alias.
Handle group-header textbox selection on mouse-down just like segment textboxes, while suppressing only the focus event that will actually occur. This preserves Ctrl, Command, and Shift selection without a timer or stale focus token, keeps keyboard focus exclusively selecting its group, and prevents a successfully deselected group from retaining an editable textbox.
This releases native subsplits throughout LiveSplit One. The updated `livesplit-core` submodule owns segment group parsing, serialization, editing operations, and the presentation rows shared by all frontends. The Run Editor now consumes that backend model to create, rename, select, reorder, and remove groups without reconstructing group membership in TypeScript. The Splits component can present runs flat, expand the current group, or expand every group. Group headers, scrolling, indentation, section boundaries, and gap separators are likewise derived from core so the web frontend stays aligned with other current and future LiveSplit frontends. Changelog (en): Subsplits are here! Organize detailed segments under clear group headers while keeping your split list focused on the group you are currently running. Open Edit Splits, select consecutive segments, and choose Create Group. The Splits component expands the current group automatically. Want a different view? Use Subsplit Display Mode in the Layout Editor to show a flat list or keep every group expanded. Existing splits and layouts that use subsplits are supported automatically. Changelog (de): Subsplits sind da! Organisiere detaillierte Segmente unter übersichtlichen Gruppenüberschriften, während sich deine Split-Liste auf die aktuell laufende Gruppe konzentriert. Öffne „Splits bearbeiten“, markiere aufeinanderfolgende Segmente und wähle „Gruppe erstellen“ – die Splits-Komponente zeigt die aktuelle Gruppe automatisch erweitert an. Du möchtest eine andere Ansicht? Über den „Subsplit-Anzeigemodus“ im Layout-Editor kannst du eine flache Liste oder alle Gruppen erweitert anzeigen. Vorhandene Splits und Layouts mit Subsplits werden automatisch unterstützt. Changelog (fr): Les subsplits sont arrivés ! Organisez vos segments détaillés sous des en-têtes de groupe clairs tout en gardant la liste centrée sur le groupe en cours. Ouvrez l'éditeur de splits, sélectionnez des segments consécutifs, puis choisissez « Créer un groupe » : le composant Splits déplie automatiquement le groupe actuel. Vous préférez une autre vue ? Utilisez le « Mode d'affichage des subsplits » dans l'éditeur de layout pour afficher une liste à plat ou garder tous les groupes dépliés. Les splits et layouts existants utilisant des subsplits sont automatiquement pris en charge. Changelog (nl): Subsplits zijn er! Orden gedetailleerde segmenten onder duidelijke groepskoppen terwijl je splitslijst op de huidige groep gericht blijft. Open de splitseditor, selecteer opeenvolgende segmenten en kies ‘Groep aanmaken’; het onderdeel Splits klapt de huidige groep automatisch uit. Wil je een andere weergave? Gebruik ‘Weergavemodus voor subsplits’ in de lay-outeditor om een platte lijst te tonen of alle groepen uitgeklapt te houden. Bestaande splits en lay-outs met subsplits worden automatisch ondersteund. Changelog (es): ¡Ya están aquí los subsplits! Organiza los segmentos detallados bajo encabezados de grupo claros mientras la lista de splits se centra en el grupo actual. Abre el editor de splits, selecciona segmentos consecutivos y elige «Crear grupo»; el componente Splits expande automáticamente el grupo actual. ¿Prefieres otra vista? Usa el «Modo de visualización de subsplits» en el editor de diseño para mostrar una lista plana o mantener expandidos todos los grupos. Los splits y diseños existentes que usan subsplits se admiten automáticamente. Changelog (it): Sono arrivati i subsplit! Organizza i segmenti dettagliati sotto intestazioni di gruppo chiare, mantenendo l'elenco degli split incentrato sul gruppo attuale. Apri l'editor degli split, seleziona segmenti consecutivi e scegli «Crea gruppo»: il componente Splits espande automaticamente il gruppo attuale. Preferisci un'altra visualizzazione? Usa la «Modalità di visualizzazione dei subsplit» nell'editor del layout per mostrare un elenco piatto o mantenere espansi tutti i gruppi. Gli split e i layout esistenti che usano i subsplit sono supportati automaticamente. Changelog (pt): Os subsplits chegaram! Organiza os segmentos detalhados sob cabeçalhos de grupo claros, mantendo a lista de splits focada no grupo atual. Abre o editor de splits, seleciona segmentos consecutivos e escolhe «Criar grupo»; o componente Splits expande automaticamente o grupo atual. Preferes outra vista? Usa o «Modo de exibição dos subsplits» no editor de layout para mostrar uma lista plana ou manter todos os grupos expandidos. Os splits e layouts existentes que usam subsplits são suportados automaticamente. Changelog (pt-BR): Os subsplits chegaram! Organize os segmentos detalhados sob cabeçalhos de grupo claros, mantendo a lista de splits focada no grupo atual. Abra o editor de splits, selecione segmentos consecutivos e escolha «Criar grupo»; o componente Splits expande automaticamente o grupo atual. Prefere outra visualização? Use o «Modo de exibição dos subsplits» no editor de layout para mostrar uma lista plana ou manter todos os grupos expandidos. Os splits e layouts existentes que usam subsplits são compatíveis automaticamente. Changelog (pl): Subsplity już są! Uporządkuj szczegółowe segmenty pod czytelnymi nagłówkami grup, pozostawiając listę splitów skupioną na bieżącej grupie. Otwórz edytor splitów, zaznacz kolejne segmenty i wybierz „Utwórz grupę”. Komponent Splits automatycznie rozwinie bieżącą grupę. Wolisz inny widok? Użyj opcji „Tryb wyświetlania podziałów podrzędnych” w edytorze układu, aby wyświetlić płaską listę lub pozostawić wszystkie grupy rozwinięte. Istniejące splity i układy korzystające z subsplitów są obsługiwane automatycznie. Changelog (ru): Подсегменты уже здесь! Организуйте подробные сегменты под понятными заголовками групп, сохраняя внимание списка сплитов на текущей группе. Откройте редактор сплитов, выделите последовательные сегменты и выберите «Создать группу». Компонент Splits автоматически раскроет текущую группу. Нужен другой вид? В редакторе раскладки используйте «Режим отображения подсегментов», чтобы показать плоский список или оставить все группы раскрытыми. Существующие сплиты и раскладки с подсегментами поддерживаются автоматически. Changelog (ja): サブスプリットが登場しました!詳細なセグメントを分かりやすい グループ見出しの下にまとめ、スプリット一覧を現在のグループに集中させられます。 スプリットエディタを開き、連続するセグメントを選択して「グループを作成」を選ぶだけで、 Splits コンポーネントが現在のグループを自動的に展開します。別の表示にしたい場合は、 レイアウトエディタの「サブスプリット表示モード」で、フラットな一覧またはすべての グループを展開する表示を選べます。サブスプリットを使用する既存のスプリットとレイアウトにも自動的に対応します。 Changelog (ko): 이제 하위 스플릿을 사용할 수 있습니다! 세부 세그먼트를 명확한 그룹 머리글 아래에 정리하면서 스플릿 목록이 현재 그룹에 집중되도록 할 수 있습니다. 스플릿 편집기를 열고 연속된 세그먼트를 선택한 다음 «그룹 만들기»를 선택하면 Splits 컴포넌트가 현재 그룹을 자동으로 펼칩니다. 다른 보기를 원하시나요? 레이아웃 편집기의 «하위 스플릿 표시 모드»에서 플랫 목록을 표시하거나 모든 그룹을 펼친 상태로 유지할 수 있습니다. 하위 스플릿을 사용하는 기존 스플릿과 레이아웃도 자동으로 지원됩니다. Changelog (zh-Hans): 子分段功能现已上线!将详细分段整理到清晰的分组标题下,让分段 列表始终聚焦于当前分组。打开分段编辑器,选中连续的分段并选择“建立群组”,Splits 组件便会自动展开当前分组。想使用其他显示方式?可在布局编辑器的“子分段显示模式”中 选择平铺列表或始终展开全部分组。已有使用子分段的分段和布局也会自动获得支持。 Changelog (zh-Hant): 子分段功能現已推出!將詳細分段整理到清楚的群組標題下,讓分段 清單持續聚焦於目前群組。開啟分段編輯器,選取連續的分段並選擇「建立群組」,Splits 元件便會自動展開目前群組。想使用其他顯示方式?可在版面配置編輯器的「子分段顯示 模式」中選擇平面清單或持續展開所有群組。現有使用子分段的分段和版面配置也會自動獲得支援。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Why
This brings native subsplit support to the web and desktop frontends while keeping group structure, visibility, and presentation decisions in livesplit-core so other frontends can consume the same model.
Validation
npm run build:corenpm run lintnpx prettier@3.8.1 --checkon the affected frontend sourcesnpm run publish